package com.cskaoyan.javase.array._4operation._2reverse;

import java.util.Arrays;

/**
 * 数组的逆序,也叫逆置,就是数组中的元素交换顺序
 * 首尾元素交换,首尾对应的元素交换
 * 对于一个arr数组来说:
 *      arr[0] <---> arr[arr.length - 1]
 *      arr[1] <---> arr[arr.length - 2]
 *      arr[2] <---> arr[arr.length - 3]
 *      ...
 *      arr[i] <---> arr[arr.length -1 -i]
 * 交换到中间,需要停止交换,如果继续交换,会又交换回去,相当于没有交换
 *
 * @since 15:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 3};
        System.out.println("逆序之前:" + Arrays.toString(arr));
        reverse(arr);
        System.out.println("逆序之后:" + Arrays.toString(arr));
    }


    // 数组的逆序,可以直接在原先的数组上进行
    public static void reverse(int[] arr) {
        // 逆序是一个交换元素的过程
        // 1.需要遍历这个数组,需要使用普通for即可,不能遍历完整个数组,只需要遍历一半就可以了
        for (int i = 0; i < arr.length / 2; i++) {
            // Java中交换变量的值,需要一个临时变量来存储值,因为内存中的赋值会覆盖掉原先的值
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
    }
}
